File:of Disk: Disks/MyPDP/m8-blue-rka1-rkb1
(Source file text)
/M5.PA 17-JUN-80 XLIST -LPWRUP-1&XLISTX /EQUATES: JSW=7746 /ADDRESS OF OS/8 JOB STATUS WORD NO=1000 /DON'T RESTART BIT IN JSW SYSHND=7607 /ENTRYPOINT OF SYSTEM HANDLER USR=7700 /USER SERVICE ROUTINE. FETCH=1 /FETCH HANDLER REQUEST CODE LOOKUP=2 /FILENAME LOOKUP REQUEST CODE ENTER=3 /ENTER NEW OUTPUT FILE CLOSE=4 /CLOSE PERMANENT FILE CD=5 /COMMAND DECODE USRIN=10 /CALL USR INTO CORE REQUEST CODE USROUT=11 /DISMISS USR REQUEST CODE INQUIRE=12 /GET DEVICE NUMBER REQUEST CODE FIELD BGFLD%10 *0 TEMP, 0 TEMP1, 0 TEMP2, 0 TEMP3, 0 ZBLOCK 3 /ODT BREAKPOINT TEMP4, 0 AUTO10, 0 AUTO11, 0 AUTO12, 0 AUTO13, 0 AUTO14, 0 AUTO15, 0 AUTO16, 0 AUTO17, 0 TEMP5, 0 TEMP6, 0 TEMP7, 0 ZNUM, 0 BINAC, 0 CHANGD, 0 /IF ZERO, CORE IMAGE MUST BE SAVED CHAIND, -1 /CHAIN SWITCH *200 PWRUP, CLA CLL / TAD [NO /SET NOT-RESTART BIT CDF 0 // DCA I [JSW // TAD [GTF // DCA I [200 //RESTORE SKIPCHAIN CDF BGFLD / AC0001 /ON SYS: CIF 10 JMS I [7700 /DELETE THE OLD COPY OF MULTI8.SV CLOSE /SOME INEXPERIENCED USERS GET MULTI8 /VERY CONFUSED BY AN OLD DATE!! 0 /0 MEANS DELETE CLA /SO WHAT? JMS I [COPYZ /COPY PAGE ZERO IN FOREGROUND FIELDS JMS I [SETNAM /ENTER PREASSEMBLED TASKS IN NAMLST JMS I [LNKTCB /LINK THE FREE TASK CONTROL BLOCKS JMS I [SAVE /SAVE THE COMPLETE IMAGE IN 'MULTI8.SV' JMP I [STRT /AND START TASKBUILDING PHASE SAVE, 0 /SAVE CORE IN 'MULTI8.SV' TAD CHANGD SZA CLA /NEED TO SAVE ? JMP I SAVE /NO, NOTHING CHANGED ISZ CHANGD /YES, RESET CHANGED FLAG TAD [MULTI8 DCA STBLK AC0001 /DEVICE IS SYS: CIF 10 / JMS I [7700 /LOOKUP THE FILE 'MULTI8.SV' LOOKUP STBLK, MULTI8 LNGTH, 0 JMS NEWSAV /CREATE THE SAVE FILE TAD LNGTH /GET MINUS FILE LENGTH TAD NEWLEN SMA SZA CLA /LONG ENOUGH ? JMS NEWSAV /TOO SHORT, MAKE A NEW SAVE FILE TAD STBLK /GET STARTING BLOCK NUMBER DCA STBLK1 /AND MOVE IT TO THE FIRST WRITE REQUEST TAD STBLK DCA I [OFSET /UPDATE OFFSET FOR TASKBUILDER CIF 0 /WRITE THE CORE CONTROL BLOCK JMS I [SYSHND /IN THE FIRST BLOCK OF THE FILE 4200+BGFLD CCB STBLK1, 0 ERR3, JMS I [ERROR /?WRITING SYS:? TAD [CCBLST-1 /POINTER TO CORE PARAMETERS LIST DCA AUTO10 /WE USE IT IN SAVING THE FILE TOO TAD STBLK1 /SET BLOCK NUMBER IAC /+1 FOR CCB DCA STBLK2 / TAD CCB /NUMBER OF SEGMENTS DCA TEMP /IN COUNTER SAVLOP, TAD I AUTO10 /GET CORE ADDRESS DCA ADR / AC4000 /SET WRITE-BIT TAD I AUTO10 / DCA FUN /SET FUNCTION WORD CIF 0 /WRITE THIS SEGMENT JMS I [SYSHND / FUN, 0 ADR, 0 STBLK2, 0 ERR3A, JMS I [ERROR /?WRITING SYS:? TAD FUN /UPDATE BLOCKNUMBER AND [3700 BSW IAC CLL RAR /ROUND UP TO # OF BLOCKS SNA TAD [20 TAD STBLK2 DCA STBLK2 ISZ TEMP /ALL SEGMENTS DONE ? JMP SAVLOP /NO, CYCLE JMP I SAVE /YES, RETURN NEWSAV, 0 ERR23A, TAD ERR3 DCA ERR23A /ONCE ONLY ! TAD [MULTI8 DCA STBLK0 /SETUP POINTER TO FILENAME AC0001 CIF 10 JMS I [7700 /ENTER NEW FILE ENTER STBLK0, MULTI8 /POINTER TO FILENAME TENTLN, 0 ERR4, JMS I [ERROR /CAN'T CLOSE SAVE FILE TAD TENTLN CLL TAD NEWLEN SZL CLA /IS THIS HOLE LARGE ENOUGH ? ERR4A, JMS I [ERROR /NO, NO ROOM FOR MULTI8.SV AC0001 CIF 10 JMS I [7700 CLOSE MULTI8 NEWLEN, SVLNGT ERR4B, JMS I [ERROR TAD NEWLEN CIA DCA LNGTH TAD STBLK0 DCA STBLK JMP I NEWSAV /RETURN TO MAIN SAVE ROUTINE /DATA FOR SAVE ROUTINE: MULTI8, IFNDEF SINGL8 < FILENAME MULTI8.SV / > IFDEF SINGL8 < FILENAME ZM16.SV / > O1=0 CCB, -FIELDS-1 /NUMBER OF SEGMENTS CDF CIF BGFLD /STARTING FIELD STRT /STARTING ADDRESS 0000 /JOB STATUS WORD CCBLST, 0000 /SEGMENT FOR BGFLD O=ENDPWR%2+BGFLD;O1=O+100%200+O1;O IFZERO FIELDS-7&4000 < 0000 /SEGMENT FOR FIELD 6 O=ENDF60%2+60;O1=O+100%200+O1;O / > IFZERO FIELDS-6&4000 < 0000 /SEGMENT FOR FIELD 5 O=ENDF50%2+50;O1=O+100%200+O1;O / > IFZERO FIELDS-5&4000 < 0000 /SEGMENT FOR FIELD 4 O=ENDF40%2+40;O1=O+100%200+O1;O / > IFZERO FIELDS-4&4000 < 0000 /SEGMENT FOR FIELD 3 O=ENDF30%2+30;O1=O+100%200+01;O / > IFZERO FIELDS-3&4000 < 0000 /SEGMENT FOR FIELD 2 O=ENDF20%2+20;O1=O+100%200+O1;O / > 0000 /SEGMENT FOR FIELD 1 O=ENDF10%2+10;O1=O+100%200+O1;O 0000 /SEGMENT FOR FIELD 0 O=ENDF00%2+00;O1=O+100%200+O1;O /THE REST OF THE FIRST BLOCK CONTAINS THE MAP OF THE FILE, E.G. /WHERE ALL TASKS IN THE TASKLIBRARY ARE STORED: DSKMAP, O1+1 /OFFSET TO FIRST TASK (OVER THE SAVE PART) ZBLOCK CCB+400-. /GOOD FOR AT LEAST 235 BLOCKS ENDMAP=.-1 O2=LOADPT-TCBTAB%10 O3=MAXNAM-O2^2 SVLNGT=O1+O3 IFNZRO BGMAX < COPDSK, 0 /SETUP DSKMAP TAD [XDSKTAB-1 /COPY XDSKTAB TO DSKTAB DCA AUTO17 TAD [DSKTAB-1 DCA AUTO16 TAD [-40 DCA TEMP1 DSKCO1, TAD I AUTO17 CDF 10 DCA I AUTO16 CDF BGFLD ISZ TEMP1 JMP DSKCO1 JMP I COPDSK /RETURN DSKTAB=7600 /V7 NOW IN CD AREA, 17600 > PAGE /***************************************************************** /******** T A S K B U I L D I N G P H A S E **************** /***************************************************************** /HERE STARTS THE TASKBUILDING PHASE: STRT, ACM1 /IF R MULTI8, SET SWITCH TO -1 DCA CHAIND /IF CHAINED SET TO 0 TAD [NO /SET NON-RESTATABLE BIT CDF 0 //IN OS8 JOB STATUS WORD DCA I [JSW // CDF BGFLD / TAD [MULTI8 DCA OFSET /LOOKUP PRESENT SAVE FILE AC0001 /SYS:=1 CIF 10 JMS I [7700 /CALL USR LOOKUP OFSET, MULTI8 /POINTER TO FILENAME/ STARTBLOCK OF FILE ACTLEN, 0 /GET FILE LENGTH ERR6, JMS I [ERROR /?MULTI8.SV NOT ON SYS:? ISZ CHAIND /WAS IT A CHAIN ? JMP I [GO /YES, START MULTI8 RIGHT AWAY TKBNXT, CIF 10 /CALL COMMAND DECODER JMS I [7700 / CD 0216 /DEFAULT EXTENSION FOR TASKS IS 'BN' JMS I [TSKBLD /TASKBUILD WHATEVER IS SPECIFIED CDF 10 //LOOK AT ALTMODE FLAG TAD I [7642 // CDF BGFLD / SMA CLA /FINISHED TASKBUILDING ? JMP TKBNXT /NO, MORE EXPECTED JMS I [SAVE /SAVE UPDATED IMAGE WITH NEW TASKS CDF 10 TAD I [7644 CDF BGFLD AND [2000 SNA CLA / /N OPTION SET ? JMP I [GO /NO, GO START MULTI8 CDF CIF 0 JMP I [7600 /YES, BACK TO OS/8 /UPDATE BLOCK NUMBERS OF TASKS IN TASK CONTROL BLOCK TABLE: SETBLK, 0 /ABSOLUTIZE BLOCKNUMBERS IN TCB'S CDF 0 // TAD [LOADPT+3 //START OF DISK RESIDENT TASKS PWR1, DCA TEMP TAD I TEMP //FETCH RELATIVE BLOCK NUMBER SNA //IF ZERO, W'RE PAST THE LAST ONE JMP PWR1A //DONE CDF BGFLD / TAD OFSET /ADD STARTBLOCK OF MULTI8.SV CDF 0 // DCA I TEMP //STORE UPDATED BLOCK NUMBER TAD TEMP TAD [10 //NEXT BLOCK # IS 10 WORDS FURTHER JMP PWR1 //CYCLE PWR1A, CDF BGFLD / JMP I SETBLK /RETURN LNKTCB, 0 /LINK THE FREE TCB'S CDF 0 // TAD I [FHEAD //ADDRESS OF FIRST FREE BLOCK LNKTC1, DCA TEMP1 // O=MAXNAM^10+TCBTAB+200&7600-17 TAD [-O TAD TEMP1 SMA CLA //END OF TCBTAB ? JMP LNKTC2 //LAST TCB TAD TEMP1 // TAD [10 //COMPUTE ADDRESS OF NEXT BLOCK DCA I TEMP1 //AND STORE IN LINK WORD TAD I TEMP1 JMP LNKTC1 //NO, CYCLE LNKTC2, DCA I TEMP1 //WHICH GETS A ZERO LINK CDF BGFLD / JMP I LNKTCB /RETURN /LOOKUP THE SWAP-FILE 'SWPFIL.M8' IFNZRO BGMAX < SETSWP, 0 /SETUP THE SWAPFILE AC0001 CIF 10 JMS I [USR /LOOKUP 'SWPFIL.M8' ON SYS: LOOKUP SWBLOK, SWPFIL /THIS GETS THE STARTING BLOCK # SWPLEN, 0 /THIS GETS MINUS THE LENGTH JMP NEWSWP /NO SWAPFILE YET TAD SWBLOK AND [TRACK-1 /COMPUTE NUMBER OF EXTRA BLOCKS TAD SWPLEN /CHECK IF SWAPFILE LONG ENOUGH IFNDEF SINGL8 < TAD [BGCORE^BGMAX^20 > IFDEF SINGL8 < TAD [BGCORE^BGMAX-BGFLDS+1^20 > SMA SZA CLA JMP NEWSWP /MUST MAKE A LONGER SWAPFILE SWAP1, TAD SWBLOK /PUT BEGIN OF SWPFIL.M8 IN TAD [TRACK-1 AND [-TRACK SETSW1, CDF 10 // DCA I [BSTAB //FIRST LOC OF BSTAB CDF BGFLD / JMP I SETSWP /RETURN NEWSWP, AC0001 /FIRST DELETE THE OLD SWPFIL CIF 10 / JMS I [USR / CLOSE / SWPFIL /POINTER TO FILE NAME 0 /LENGTH IS ZERO: DELETE FILE NOP /MAYBE IT ISN'T THERE AT ALL AC0001 /CREATE A NEW SWPFIL.M8 CIF 10 / JMS I [USR / ENTER /ENTER THE NEW FILE SWPFIL /POINTER TO FILENAME NEWLNG, 0 /GETS MAXIMUM LENGTH ERR5, JMS I [ERROR /?CAN'T ENTER SWPFIL.M8? TAD NEWLNG-1 /GET STARTING BLOCK CIA /COMPUTE EXTRA BLOCKS TO ALLIGN WITH DISK AND [TRACK-1 /COMPUTE NUMBER OF EXTRA BLOCKS IFNDEF SINGL8 < TAD [BGCORE^BGMAX^20 > IFDEF SINGL8 < TAD [BGCORE^BGMAX-BGFLDS+1^20 > DCA CLNGTH /AND STORE IN CLOSE REQUEST STL / TAD CLNGTH /SEE IF THERE IS ENOUGH ROOM TAD NEWLNG SNL SZA CLA /ENOUGH ? ERR5B, JMS I [ERROR /?NO ROOM FOR SWPFIL.M8? AC0001 CIF 10 /NOW CLOSE THE FILE JMS I [USR / CLOSE SWPFIL CLNGTH, 0 ERR5A, JMS I [ERROR /?CAN'T CLOSE SWPFIL.M8? TAD NEWLNG-1 /GET STARTING BLOCK DCA SWBLOK TAD CLNGTH DCA SWPLEN JMP SWAP1 /CARRY ON > PAGE IFNZRO BGMAX < PTEMP1, FAKHND PTEMP2, FAKSYS PTEMP3, -FAKLEN PTEMP4, BOBOOT PTEMP5, BOOBUF PTEMP6, -BOBOEND PTEMP7, BOBOEND-447-17 PTEMP8, DEVLST PTEMP9, FASSGN PTEMP0, FASSGN+2-SYSHND+FAKSYS PRBOOT, RBOOT SETFAK, 0 /ROUTINE TO SETUP FAKEHANDLER STUFF JMS I PRBOOT /READ BOOTSTRAP FROM OS8 DEV CIF 10 JMS I [USR USRIN /MOVE FAKEHANDLER OVER SYSTEM-HANDLER PWR4, TAD I PTEMP1 DCA I PTEMP2 ISZ PTEMP1 ISZ PTEMP2 ISZ PTEMP3 /DONE ? JMP PWR4 /NO, CYCLE CDF 0 TAD I [7777 /GET DATE EXTENSION BITS CDF BGFLD AND [4707 IFNDEF SINGL8 < TAD [BGFLDS-1^10+1000 /RTS8-BIT & SOFTWARE CORE SIZE > IFDEF SINGL8 < TAD [BGCORE-1^10+1000 /RTS8-BIT & SOFTWARE CORE SIZE > DCA I [BGCORW /CORE-SIZE SET INITIALLY AT #FLDS-FGRND /COPY SYSTEM BOOTSTRAP PWR4A, TAD I PTEMP4 DCA I PTEMP5 ISZ PTEMP4 ISZ PTEMP5 ISZ PTEMP6 JMP PWR4A /CLEAR DEVICE RESIDENCY TABLE DCA I PTEMP5 ISZ PTEMP5 ISZ PTEMP7 JMP .-3 /PUT FAKEHANDLER ENTRY POINTS IN DEVICE RESIDENCY TABLE TAD [SYSHND DCA I [DVRSTB /ENTRYPOINT SYS: TAD [SYSHND DCA I [DVRSTB+1 /ENTRYPOINT DSK: JMP PWR5B PWR5, DCA DEVNAM ISZ PTEMP8 TAD I PTEMP8 DCA DEVNAM+1 /SECOND WORD OF DEVICE NAME ISZ PTEMP8 /PTEMP8 POINTS TO DEVICE TYPE CIF 10 JMS I [200 INQUIRE /ASK USR WHAT INTERNAL DEVICE # IT HAS DEVNAM, ZBLOCK 3 /GETS DEVICE NAME JMP PWR5A /DEVICE DOES NOT EXIST, THAT'S /A PITY FOR HIM TAD DEVNAM+1 /THIS IS THE INTERNAL DEV NUMBER NOW TAD [DVRSTB-1 /INDEX IN DEVICE RESIDENCY TABLE /(THE ONE THAT IS IN THE BOOTBUFFER) DCA TEMP2 TAD PTEMP9 /GET NEXT ENTRYPOINT IN FAKEHANDLER DCA I TEMP2 /AND DROP IN DEVICE RESIDENCY TABLE. /SO OS/8 WILL THINK THE HANDLER IS TAD DEVNAM+1 /CORESIDENT WITH SYS: TAD [DVTYPT-1 DCA TEMP2 TAD I PTEMP8 DCA I TEMP2 /SET CORRECT DEVICE TYPE ISZ PTEMP8 /POINTS TO FAKEHANDLER CODE NUMBER TAD I PTEMP8 /GET CODE NUMBER DCA I PTEMP0 /AND STORE IN FAKEHANDLER AC0003 /ADVANCE POINTERS TAD PTEMP9 DCA PTEMP9 AC0003 TAD PTEMP0 DCA PTEMP0 SKP PWR5A, ISZ PTEMP8 ISZ PTEMP8 PWR5B, TAD I PTEMP8 SZA /DONE ? JMP PWR5 /NO, CYCLE CIF 10 JMS I [200 USROUT /DISMISS USR CIF 0 JMS I [SYSHND 4400+BGFLD /WRITE THE FAKED BOOTBLOK IN BLOCK 40 BOOBUF 40 /OS/8 SCRATCH BLOCK ERR8, JMS I [ERROR /?WRITING BOOBLK.M8? CLA /YES JMP I SETFAK /RETURN PAGE / > /NOW WE SETUP THE FOREGROUND PAGE 0'S COPYZ, 0 /SETUP FOREGROUND FIELDS PAGE ZERO TAD [-FIELDS+1 DCA TEMP1 /COUNTER PWR8, TAD [-COMPNT DCA TEMP2 /COUNTER DCA TEMP3 /POINTER STARTS AT ZERO PWR9, CDF 00 TAD I TEMP3 /GET A WORD FROM 00 PWR10, CDF 00+10 DCA I TEMP3 /PUT A WORD INTO ANOTHER FIELD ISZ TEMP3 /BUMP THE POINTER ISZ TEMP2 /200 DONE ? JMP PWR9 /NO, CYCLE TAD PWR10 DCA I [MYCDF AC0001 TAD PWR10 DCA I [MYCIF AC0002 TAD PWR10 DCA I [MYCDIF TAD PWR10 TAD [10 DCA PWR10 ISZ TEMP1 JMP PWR8 /NEXT FIELD CDF BGFLD JMP I COPYZ /RETURN /FILL IN CLRTAB WITH THE ORIGINAL CLEAR-IOT'S FROM THE SKIPCHAIN COPCLR, 0 /SETUP CLRTAB CDF 00 TAD [-INTDEV+1 DCA ZTEM2 /WE MAY USE THE ZTEM'S NOW! TAD [CLRTAB-1 DCA AUTO10 TAD [SKP0-1+4 PWR12, DCA ZTEM1 TAD I ZTEM1 DCA I AUTO10 TAD ZTEM1 TAD [4 ISZ ZTEM2 JMP PWR12 CDF BGFLD CLA CLL JMP I COPCLR IFNZRO BGMAX < /CALL: JMS SETLEN / PROG NAME POINTER / BLOCK OFFSET / - TEST VALUE OF 1'ST WORD / ADDRESS OFFSET /MAY RETURN THRU / TABLE INCREMENT /THESE TWO SETLEN, 0 /PATCH PROGRAM DEVICE LENGTH TABLE TAD I SETLEN DCA PRGBLK /SET NAME POINTER ISZ SETLEN /NEXT ARG AC0001 /PROG.SV IS ON SYS: USUALLY CIF 10 JMS I (USR /LOOKUP PROG.SV LOOKUP PRGBLK, 1234 0 /(GETS -LENGTH OF PROG.SV) JMP SETEX1 /SORRY, PROG NOT FOUND AC0004 /PROG MUST BE 4 BLOCKS AT LEAST TAD PRGBLK+1 /GET -LENGTH OF PROG.SV SMA CLA /OK ? JMP SETEX1 /NO, MAYBE IT'S A SHSAVE FILE TAD I SETLEN /GET BLOCK OFFSET ISZ SETLEN TAD PRGBLK DCA PRGB1 TAD PRGB1 DCA PRGB2 CIF 0 JMS I (SYSHND 200+BGFLD /READ 1 BLOCK IN THIS FIELD PRGBUF, BUFST /USE INPUT BUFFER OF TSKBLD PRGB1, 0 /GETS BLOCK NUMBER JMP SETEX2 /SORRY, YOUR PROG IS POOH TAD I SETLEN /GET TEST VALUE ISZ SETLEN TAD I PRGBUF /TEST FIRST VALUE OF BUFFER SZA CLA /OK? JMP SETEX /NO, BAD VERSION: FALL THRU ARGS TAD (-10 DCA PRGB1 /FOR A COUNTER TAD (LNGLST-1-BGNUMB+BOBOOT DCA AUTO10 /RELOCATED IN BOOT BLOCK TAD I SETLEN /GET ADDRESS OFFSET ISZ SETLEN TAD (BUFST DCA PRGBLK PRGLOP, TAD I AUTO10 DCA I PRGBLK TAD I SETLEN /ADD INCREMENT TAD PRGBLK DCA PRGBLK ISZ PRGB1 JMP PRGLOP /ENTER DEVICE LENGTH FOR DEV 50-57 CIF 0 JMS I (SYSHND /AND WRITE IT BACK TO PROG 4200+BGFLD BUFST PRGB2, 0 JMP SETEX /WRITE ERROR ? PITY JMP SETEX SETEX1, ISZ SETLEN SETEX2, ISZ SETLEN SETEX, CLA JMP I SETLEN /RETURN > PAGE GO, IFNZRO BGMAX <JMS I (SETPIP /PATCH PIP DEVICE LENGTH TABLE > JMS I (SETDMP /SETUP TO RUN MONDUM @ 7757 JMS I (PDPTST /CHECK THE AVAILABLE HARDWARE IFNZRO BGMAX < JMS I (SETSWP /CREATE SWAPFILE JMS I (SETMEM /SETUP BSTAB FOR AVAILABLE MEMORY JMS I (SETFAK /SETUP FAKE HANDLER JMS I (COPDSK /SETUP DSKTAB > JMS I (SETBLK /RELOCATE TASK BLOCK NUMBERS JMS I (COPCLR /COPY CLEARIOTS IN CLRTAB IFNZRO BGMAX <JMS I (SETTRP /SETUP THE MMU > /NOW COMES A DIRTY PIECE OF CODE, THAT INITIALIZES ALL SORTS /OF PERIPHERALS; MAYBE YOU HAVE TO EDIT THIS PART FOR YOUR /SPECIALTIES ! CAF TLS /THATS AN EASY ONE IFDEF KL8E2 < 6016+KL8E2 / > IFDEF KL8E3 < 6016+KL8E3 / > IFDEF KL8E4 < 6016+KL8E4 / > IFDEF KL8E5 < 6016+KL8E5 / > IFDEF KL8E6 < 6016+KL8E6 / > IFDEF KL8E7 < 6016+KL8E7 / > CLA IFDEF PP8E < 6024 / > IFDEF LE8E < IFZERO LE8E&1 < 6666 / > IFNZRO LE8E&1 < 6574 / >> IFDEF DR8EA1 <DR8EA1+6000 /DISABLE INTERRUPTS > IFDEF DR8EA2 <DR8EA2+6000 /DISABLE INTERRUPTS > IFDEF KL8A1 < KL8A1+6010 TAD (KL8TAB KL8A1+6012 AC0001 KL8A1+6000 / > IFDEF KL8A2 < KL8A2+6010 TAD (KL8TAB+10 KL8A2+6012 AC0001 KL8A2+6000 / > /STARTING THE CLOCKS: IFDEF RFCLOCK < 6601 TAD (RFINTS 6615 / > IFDEF DK8EA < DK8EA+6001 / > IFDEF DK8EC < DK8EC+6001 / > IFDEF DK8EP < IFNDEF DK8EA < IFNDEF DK8EC < IFNDEF DKC8AA < TAD (-1750 6003+DK8EP /AC IS NOT CLEARED, BUT ... TAD [5410+1750 6002+DK8EP CLA / >>>> IFDEF DKC8AA < AC0001 6135 CLA / > IFDEF AX08 < 6364 ISZ .-1 JMP .-1 6362 /CLEAR ADC DONE FLAG CLA /? > IFDEF FPP < AC2000 /SEE IF M&S FPP INSTALLED 6144 /SEMO DP AS TRIAL SNA CLA /DID IT CLEAR AC ? JMP .+5 /YES, OK TAD (FPICL+2&177+5200 /NO, DO 'JMP FPICL+2' SO THAT CDF 10 DCA I (FPST+2 /FPSTART DOES NOT SKIP, BUT 'JMP EMREDY' CDF BGFLD / > /NOW WE WILL SCHEDULE THE AUTO-START TASKS TO GET THE WORLD /GOING. BECAUSE THIS POWERUP CODE IS NOT IN A /FOREGROUND FIELD, WE CAN'T SIMULATE IT TO BE A TASK, /THAT CALLS THE OTHER TASKS. THUS WE MUST STRING THEM /IN THE SYSTEM'S QUEUE'S AND SET THEIR BACKLINK BUSY /'BY HAND'. TAD [TCBTAB+1 /LOOK FOR EACH TASKS' THREAD IN DCA TEMP1 /HIS TCBP. IF NONZERO HE MUST BE STARTED TAD [-MAXNAM DCA TEMP7 /COUNTER PWR14, CDF 0 TAD I TEMP1 SNA CLA /AUTO-START ? JMP PWR15 /NO TRY NEXT ONE ACM1 TAD TEMP1 DCA TEMP2 AC0001 DCA I TEMP2 /SET HIS BACKLINK TO 'RUNNED' TAD I [MTAIL /PUT HIM ON THE MAINQUEUE DCA TEMP2 TAD TEMP1 DCA I TEMP2 TAD TEMP1 DCA I [MTAIL DCA I TEMP1 ISZ TEMP1 TAD TEMP1 TAD [5 DCA TEMP2 /ADDRESS OF PC TAD I TEMP1 /GET HIS START ADDRESS DCA I TEMP2 /AND DROP IT INTO HIS PC ACM1 PWR15, TAD TEMP1 /GET POINTER AND TAD [10 DCA TEMP1 /ADVANCE TO NEXT THREAD ISZ TEMP7 /ALL TASKS DONE ? JMP PWR14 /NO CDF CIF 00 JMP I [DISPATCH /............... IFNZRO BGMAX < SETTRP, 0 /SETUP THE TRAP/UNTRAP RAM TAD [-100 DCA ZTEM1 TAD [6000 DCA ZTEM2 TAD ZTEM2 6235 /LOAD TRAP REGISTER, CLA TAD ZTEM2 TAD [10 ISZ ZTEM1 JMP .-6 CLA TAD [TRPTAB-1 DCA AUTO10 TAD I AUTO10 SNA JMP .+3 6235 /LOAD TRAP REGISTER, CLA JMP .-4 6265 /ENABLE MEMORY MANAGEMENT ! JMP I SETTRP /RETURN RBOOT, 0 /READ BOOTSTRAP CIF 0 JMS I [SYSHND 200+BGFLD BOOBUF+400 0 JMP ERR2 CDF 0 AC7775 TAD I P7612 /TEST IF 2 PAGE SYS HANDLER CDF BGFLD SZA CLA JMP I RBOOT /IT WAS'NT CIF 0 JMS I [SYSHND /IT WAS, READ 17600 PART 100+BGFLD BOOBUF+400 66 /FROM BLOCK 66 ERR2, JMS I [ERROR /?READING BLOCK 0 (OR 66)? JMP I RBOOT P7612, 7612 > PAGE SETDMP, 0 /SETUP .R MONDUM AC0001 CIF 10 JMS I [USR /LOOKUP MONDUM.SV LOOKUP DMPBLK, MONDUM 0 JMP I SETDMP /MONDUM.SV NOT FOUND TAD [CIF CDF BGFLD /RUN MONDUM IN FIRST BG FIELD CDF 0 DCA I [7772 /STARTING FIELD TAD [201 /MONDUM CHAIN ADDRESS DCA I [7775 TAD DMPBLK IAC DCA I [7762 /BLOCK NUMBER DCA I [7761 TAD [1000+BGFLD DCA I [7760 /FUNCTION WORD [READ 10 PAGES) TAD [5372 DCA I [7764 TAD [SYSHND DCA I [7756 CDF BGFLD JMP I SETDMP MONDUM, FILENAME MONDUM.SV IFNZRO BGMAX < /ROUTINE TO ENABLE MEMORY FIELDS THAT SEEM TO BE PRESENT IN /THIS MACHINE. SETMEM, 0 TAD [-BGFLDS+1 DCA TEMP /COUNT FIELD BGFLD+1 ... 7 TAD [CDF BGFLD+10 DCA SETMM1 /CDF TO FIRST FIELD TO TEST TAD [BSTAB+1+1 DCA TEMP1 /POINTER TO CORRESPONDING BSTAB ENTRY SETMM1, CDF TAD . /THERE IT IS AGAIN, LARY DCA I [FHEAD /SOME PAGE ZERO LOCATION TAD I [FHEAD CDF 10 SNA CLA ACM1 /LOCK BAD FIELDS SZA DCA I TEMP1 / ISZ TEMP1 TAD SETMM1 TAD [10 DCA SETMM1 /NEXT FIELD ISZ TEMP /ALL DONE ? JMP SETMM1 /NO, CONTINUE CDF BGFLD /YES, RETURN JMP I SETMEM / > PDPTST, 0 /A SUBROUTINE THAT TESTS IF WE ARE CLA CLL /AT A REASONABLE KIND OF MACHINE. /TEST IF WE WORK IN THE BACKGROUND. (6254 ONLY FOR MULTI8) TCF TSF SKP ERR0, JMS I [ERROR /?VIRTUIAL MACHINE? IFNZRO BGMAX < 6225 /SKIP IF MEMORY MANAGEMENT INSTALLED ERR7, JMS I [ERROR /*?MEMORY MANAGEMENT?* > JMP I PDPTST ERROR, 0 /GENERAL ERROR MESSAGE HANDLER CLA CLL CDF BGFLD /YOU NEVER KNOW TAD [ERRLST-1 DCA AUTO10 TAD ERROR CIA IAC DCA ERROR ERRLOP, TAD I AUTO10 SZA /TEST FOR END OF LIST TAD ERROR SNA CLA JMP ERRFND /THIS MUST BE THE ERROR ISZ AUTO10 ISZ AUTO10 JMP ERRLOP ERRFND, TAD I AUTO10 DCA .+2 JMS TXTOUT /PRINT THE MESSAGE 0 JMS CRLF TAD I AUTO10 DCA ERROR JMP I ERROR /GO TO CONTINUATION ADDRESS TXTOUT, 0 CLA CLL CDF BGFLD TAD I TXTOUT /GET POINTER TO STRING DCA TXTPNT ISZ TXTOUT TXT1, TAD I TXTPNT SNL BSW AND [77 SNA /END OF STRING ? JMP I TXTOUT /YES, QUIT TAD [240 AND [77 TAD [240 JMS OUT CML SNL ISZ TXTPNT JMP TXT1 TXTPNT, 0 OUT, 0 TLS TSF JMP .-1 CLA JMP I OUT CRLF, 0 TAD [215 JMS OUT TAD [212 JMS OUT JMP I CRLF PAGE IFNZRO BGMAX < SETPIP, 0 JMS I PSETL /SET LENGHTS IN PIP PIPNAM 4 /BLOCK 4 -770 /TEST 50+200 /ADDRESS 1 /INCREMENT JMS I PSETL /SET LENGTHS IN RESORC RESNAM 7 -2424 50^4+2 4 JMP I SETPIP PSETL, SETLEN PIPNAM, FILENAME PIP.SV RESNAM, FILENAME RESORC.SV / > SWPFIL, FILENAME SWPFIL.M8 E, CDF CIF 0 JMP I [7600 ERRLST, /LIST OF ERROR ADRESSES, STRING POINTERS AND CONTINUATION /ADDRESSES: ERR0;MSG0;E IFNZRO BGMAX < ERR2;MSG2;E > ERR3;MSG3;E ERR3A;MSG3;E ERR4;MSG4;E ERR4A;MSG4;E IFNZRO BGMAX < ERR5;MSG5;E ERR5A;MSG5;E ERR5B;MSG5;E > ERR6;MSG6;E IFNZRO BGMAX < ERR7;MSG7;E ERR8;MSG8;E > ERR9;MSG9;E ERR10;MSG10;E ERR21;MSG21;E ERR21A;MSG21;E ERR21B;MSG21;E ERR22;MSG22;E ERR23;MSG23;E ERR23A;MSG23;E ERR25;MSG25;E ERR26;MSG26;E ERR27;MSG27;E ERR28;MSG28;E ERR29;MSG29;E /END OF ERROR LIST: 0;MSG99;E MSG0, TEXT *?VIRTUAL MACHINE?* MSG2, TEXT *?READING BLOCK 0 (OR 66)?* MSG8, MSG11, MSG3, TEXT *?WRITING SYS:?* MSG4, TEXT *?NO ROOM FOR MULTI8.SV?* MSG5, TEXT *?NO ROOM FOR SWPFIL.M8?* MSG6, IFNDEF SINGL8 < TEXT *?MULTI8.SV NOT ON SYS:?* / > IFDEF SINGL8 < TEXT *?ZM16.SV NOT ON SYS:?* / > MSG7, TEXT *?MEMORY MANAGEMENT?* MSG9, TEXT *?NON-RESIDENT HANDLER?* MSG10, TEXT *?READ ERROR?* MSG21, TEXT *?PREAMBLE ERROR?* MSG22, TEXT *?BAD BINARY?* MSG23, TEXT *?MULTI8.SV TOO SHORT?* MSG25, TEXT *?CHECKSUM?* MSG26, TEXT *?TASK LENGTH?* MSG27, TEXT *?TASK LIBRARY FULL?* MSG28, TEXT *?NAME LIST FULL?* MSG29, TEXT *?WRITE ERROR?* MSG99, TEXT *?UNDEFINED ERROR?* FAKVER="M&77 IFNZRO BGMAX < FAKHND, RELOC SYSHND FSYS, FAKVER /ENTRY SYSTEM HANDLER JMS FGENIO 00 /AC-CODE^10+UNIT BITS FAKVER JMS FGENIO 01 FAKVER JMS FGENIO 02 FAKVER JMS FGENIO 03 FASSGN, FAKVER JMS FGENIO 0 FAKVER JMS FGENIO 0 FAKVER JMS FGENIO 0 FAKVER JMS FGENIO 0 FAKVER JMS FGENIO 0 FAKVER JMS FGENIO 0 FAKVER JMS FGENIO 0 FAKVER JMS FGENIO 0 FAKVER JMS FGENIO 0 FAKVER JMS FGENIO 0 FAKVER JMS FGENIO 0 FAKVER JMS FGENIO 0 M8BITS, IFNZRO .-7667 <XERROR> /SOME OPTION BITS THAT BG PROGRAMS MAY /WANT TO KNOW. O=0 IFDEF DKUSED <O=O+4000 /BIT 0 IS DKUSED > IFDEF SINGL8 <O=O+2000 /BIT 1 SHOWS SINGL8 > IFDEF UBITS <O=UBITS&77+O /FREE BITS FOR USER APPLICATIONS: /EG. SPECIFY ONE OF SEVERAL INSTALLATIONS > O /THERE WE ARE ! FGENIO, 0 /SETUP DTV,ISUE 6000 ACM2 TAD FGENIO /AC POINTS TO ENTRY OF HANDLER TAD F1400 /FORM TAD FSYS, TAD FDTA0,... DCA FGTMP /EXECUTE INLINE FGTMP, 0 /INSTRUCTION OR POINTER DCA FGTMP /FGTMP IS MOVED ENTRY NOW TAD I FGTMP /GET FUNCTION ISZ FGTMP DCA FUNC /FIRST WORD OF DTV TAD I FGTMP /GET CORE ADDRESS ISZ FGTMP DCA FUNC+1 TAD I FGTMP /GET BLOCK ISZ FGTMP DCA FUNC+2 RDF /SET RETURN FIELD CDF 0 TAD FCDIF DCA FEXIT TAD I FGENIO AND F0076 / SZA CLA /SYS: OR DSK0: ? KSF /FLAG UP ? JMP FGNOSYS /NO, DON'T TEST KRS /YES TAD FM203 /TYPED ^C ? SNA CLA JMP 7600 /YES, NO TRANSFER FGNOSYS,TAD I FGENIO /GET UNIT+FUNCTION 6000 /THE REST IS NOT OUR BISNESS JMP .+4 /SKIP THE PARAMETER WORDS FUNC, ZBLOCK 3 /THE 3 PARAMETERS SNA /ERROR ? ISZ FGTMP /NORMAL RETURN FEXIT, CDF CIF /CDF CIF RETURN JMP I FGTMP /RETURN FCDIF, CIF CDF 0 F1400, 1400 FM203, -203 F0076, 0076 FAKLEN=.-SYSHND /LENGTH OF FAKEHANDLER CODE IFNZRO 7743-.&4000 <FAKERR,XERROR> RELOC DEVLST, IFDEF TC08 <TAPEDCB=4160> IFDEF TD8E <TAPEDCB=4210> IFDEF TAPE < DEVICE DTA0;TAPEDCB;DTACHN+0 DEVICE DTA1;TAPEDCB;DTACHN+1 DEVICE DTA2;TAPEDCB;DTACHN+2 DEVICE DTA3;TAPEDCB;DTACHN+3 DEVICE DTA4;TAPEDCB;DTACHN+4 DEVICE DTA5;TAPEDCB;DTACHN+5 DEVICE DTA6;TAPEDCB;DTACHN+6 DEVICE DTA7;TAPEDCB;DTACHN+7 > IFDEF LPT < DEVICE LPT;1040;LPTCHN+0 > IFDEF RX01 <RXDCB=4250> IFDEF RX02 <RXDCB=4320> IFDEF RXA < IFNDEF SYRX02 < DEVICE RXA0;RXDCB;RXACHN+0 DEVICE RXA1;RXDCB;RXACHN+1 > IFDEF SYRXO2 < DEVICE RXA1;RXDCB;SYSCHN+1 /RXA1 IS PUBLIC IN SINGL8 DEVICE RXA2;RXDCB;RXACHN+0 DEVICE RXA3;RXDCB;RXACHN+1 > DEVICE RBA0;4410;RXACHN+2 DEVICE RBA1;4410;RXACHN+3 /BYTE MODE FLOPPY > IFDEF SYRK8E < DEVICE RKB0;4230;SYSCHN+1 DEVICE RKA1;4230;SYSCHN+2 DEVICE RKB1;4230;SYSCHN+3 DEVICE RKA2;4230;SYSCHN+4 DEVICE RKB2;4230;SYSCHN+5 DEVICE RKA3;4230;SYSCHN+6 DEVICE RKB3;4230;SYSCHN+7 > IFDEF NSRK8E < DEVICE RKA0;4230;DSKCHN+0 DEVICE RKB0;4230;DSKCHN+1 DEVICE RKA1;4230;DSKCHN+2 DEVICE RKB1;4230;DSKCHN+3 DEVICE RKA2;4230;DSKCHN+4 DEVICE RKB2;4230;DSKCHN+5 DEVICE RKA3;4230;DSKCHN+6 DEVICE RKB3;4230;DSKCHN+7 > IFDEF SYRL01 < DEVICE RL0B;4260;SYSCHN+1 DEVICE RL1A;4260;SYSCHN+2 DEVICE RL1B;4260;SYSCHN+3 DEVICE RL2A;4260;SYSCHN+4 DEVICE RL2B;4260;SYSCHN+5 DEVICE RL3A;4260;SYSCHN+6 DEVICE RL3B;4260;SYSCHN+7 DEVICE RL0C;4310;RLCCHN+0 DEVICE RL1C;4310;RLCCHN+1 DEVICE RL2C;4310;RLCCHN+2 DEVICE RL3C;4310;RLCCHN+3 > IFDEF NSRL01 < DEVICE RL0A;4260;DSKCHN+0 DEVICE RL0B;4260;DSKCHN+1 DEVICE RL1A;4260;DSKCHN+2 DEVICE RL1B;4260;DSKCHN+3 DEVICE RL2A;4260;DSKCHN+4 DEVICE RL2B;4260;DSKCHN+5 DEVICE RL3A;4260;DSKCHN+6 DEVICE RL3B;4260;DSKCHN+7 DEVICE RL0C;4310;RLCCHN+0 DEVICE RL1C;4310;RLCCHN+1 DEVICE RL2C;4310;RLCCHN+2 DEVICE RL3C;4310;RLCCHN+3 > IFDEF CRD < CDRPAT, DEVICE CDR;2030;CRDCHN+0 /MUST BE THE LAST IN THE LIST !!! > 0000 /END OF LIST ! BOBOOT, RELOC 7000 BGNUMB, 0 /GETS DEVICE TYPE ON BOOT OR RESTORE LNGLST, /LIST OF DISK LENGTH'S -SIZE0 /DSK0: = SYS: -SIZE1 /DSK1: -SIZE2 /DSK2: -SIZE3 /DSK3: -SIZE4 /DSK4: -SIZE5 /DSK5: -SIZE6 /DSK6: -SIZE7 /DSK7: BOTRNS, 0 /LOCAL 'HANDLER' TO KEEP SYS: VIRGIN DCA TRTEMP TAD I BOTRNS ISZ BOTRNS DCA BOCALL TAD I BOTRNS ISZ BOTRNS DCA BOCALL+1 TAD I BOTRNS ISZ BOTRNS DCA BOCALL+2 TAD TRTEMP 6000 JMP .+4 BOCALL, ZBLOCK 3 SZA HLT JMP I BOTRNS TRTEMP, 0 ASKDIR, 0 /ASK PERMISSION TO ZERO THE DIRECTORY JMS BOTRNS /READ DIRECTORY FROM THIS SYS: 200 0 1 TAD 1 /LOOK AT INITIAL BLOCK TAD (-70 /IS IT A SYSTEM DIRECTORY? SNA CLA JMP I ASKDIR /YES, GO ON BTXT1, TAD ZEROMS /NO, WRITE MESSAGE FOR OK TO ZERO ISZ BTXT1 / TLS / SZA CLA / JMP BTXT1 / KCC / KSF /WAIT FOR ANSWER JMP .-1 / KRB / AND (337 /STRIP LOWERCASE BIT TAD (-"Y / SZA / TAD ("Y-"J / SZA CLA / HLT /STOP THIS THING ...!!! TAD (215 /CRLF TLS / TAD (212-215 / TLS / ISZ ASKDIR /'ZERO' RETURN JMP I ASKDIR /AC RANDOM ! ZEROMS, IFNDEF GERMAN < "N;"O;" ;"v;"a;"l;"i;"d;" ;"d;"i;"r;"e;"c;"t;"o;"r;"y;" ;"o "n;" ;"t;"h;"i;"s;" ;"a;"r;"e;"a;" ;"-;" ;"s;"h;"a;"l "l;" ;"I;" ;"Z;"E;"R;"O;" ;"i;"t;" ;"?;" ;0 / > IFDEF GERMAN < "K;"E;"I;"N;" ;"V;"e;"r;"z;"e;"i;"c;"h;"n;"i;"s;" ;"a;"u "f;" ;"d;"i;"e;"s;"e;"m;" ;"B;"e;"r;"e;"i;"c;"h;" ;"- " ;"s;"o;"l;"l;" ;"i;"c;"h;" ;"Z;"E;"R;"O;" ;"m;"a;"c "h;"e;"n;" ;"?;" ;0 / > PAGE JMP BOOT /ENTRY FOR NORMAL BOOTSTRAP OPERATION B0, JMS I (ASKDIR /READ DIR AND ASK PERMISSION TO ZERO IF BAD JMP DIROK /DIRECTORY WAS OK, GO ON ACM1 /DIR WAS BAD BUT WE GOT OK, MAKE NEW DIRECTORY DCA 0 /ONE EMPTY TAD (70 DCA 1 /FILE STORAGE START DCA 2 /NO LINK DCA 3 /NO OPEN OUTPUT FILES ACM1 DCA 4 /1 ADD. INFO WORD (DATE) DCA 5 /EMPTY ENTRY TAD I (BGNUMB /WHO AM I? CLL RTR RAR /045X TAD (LNGLST-451 /INDEX INTO BACKGROUND LENGTH LIST DCA 10 TAD I 10 /GET NEGATIVE LENGTH TAD (70 /--70 BLOCKS FOR SYSTEM DCA 6 /INTO LENGTH OF FIRST ENTRY JMS I (BOTRNS /WRITE IN MY DIRECTORY 4200 /HOPE I HAVEN'T KILLED ANYTHING 0 1 DIROK, AC0001 JMS I (BOTRNS /READ MONITOR FROM DSK0: 10 0 7 /KM-USR-DVHS-ENTER(TM8E) /7 13 16 26 TAD I (BGNUMB /GET OUR DEVICE TYPE DCA I (7560 /SET OUR SYS: TYPE TAD I (BGNUMB DCA I (7561 /SAME FOR DSK: TAD (7447+15-1-1 DCA 10 /SET POINTER TO RESIDENCY TABLE TAD (7560+15-1-1 DCA 11 /SET POINTER TO DEVICE TYPE TABLE IFDEF SINGL8 < TAD (7620 /ENTRY POINT DSK2: DCA I 10 / TAD (6520 /DEVICE TYPE DSK2: DCA I 11 / > IFNDEF SINGL8 < ISZ 10 / ISZ 11 / > IFDEF SINGL8 < TAD (7615 /ENTRY POINT DSK1: DCA I 10 / TAD (6510 /DEVICE TYPE DSK1: DCA I 11 / > IFNDEF SINGL8 < ISZ 10 / ISZ 11 / > TAD (7612 /ENTRY POINT DSK0: DCA I 10 / TAD (6500 /DEVICE TYPE DSK0: DCA I 11 / CDF 10 // TAD I (36+2000 // IFDEF SINGL8 < TAD (2000+15-1-1// > IFNDEF SINGL8 < TAD (2000+17-1-1// > DCA 10 //SET POINTER TO PERMANENT DEVICE NAME TABLE IFDEF SINGL8 < TAD (6005 //CODE FOR DSK2: DCA I 10 // TAD (6004 //CODE FOR DSK1: DCA I 10 // > TAD (6003 //CODE FOR DSK0: DCA I 10 // TAD I (37+2000 // TAD BO2000 // DCA 0 //SET POINTER TO DEVICE HANDLER INFO BRSLP, CDF 0 /ONCE ONLY CODE TAD I RESTEM /IS THIS DEVICE RESIDENT? CDF 10 // SZA CLA // DCA I 0 //ZERO DEVICE HANDLER INFO FOR THIS DEVICE ISZ RESTEM // BO2000, ISZ 0 //TO NEXT ISZ RESCNT //MORE? JMP BRSLP //YES CDF 0 JMS I (BOTRNS /WRITE ON SYS: 4010 0 7 AC0001 /READ NEXT PART OF MONITOR JMS I (BOTRNS /FROM DSK0: 3610 0000 51 /CD-SADA-ERR-CHN-ODT-MRG-REM-BOO-CCL /51 54 56 57 60 64 65 66 67 IFZERO OS8-40 < /MAKE CCL RUN FROM DSK0: CDF 10 TAD (17 /MOVE DSK0: DEV # TO CCL OVERLAY DCA I (7205 TAD (7612 /ALSO DSK0: HANDLER ENTRY POINT DCA I (7206 CDF 0 / > JMS I (BOTRNS /WRITE IT BACK ON THIS SYS: 7610 0 51 JMS I (BOTRNS /WRITE BLOCK 0 ON SYS: 4200 7400 0000 JMP I (BOOT1 BOOT, JMS I (BOTRNS /READ BLOCK 0 200 /WHICH HAS OUR SPECIFIC INFO 7400 0000 JMP I (BOOT1 RESTEM, 7447 /ONCE ONLY RESCNT, -17 /ONCE ONLY PAGE BOOT1, CDF 10 BOLOOP, TAD BOOT1+47 DCA I BOPNT ISZ BOLOOP ISZ BOPNT JMP BOLOOP CDF 0 JMP I .+1 /SLIP INTO 7600 7605 BOPNT, 7647 IFDEF SYRX02 < NOPUNC /IT TOOK MORE TIME TO FIGURE OUT *.+2 /RX02 LOADS AT 2 ENPUNC / > IFNDEF SINGL8 < BOMESS, 207;"M;"8;" ;"D;"A;"T;"A;"-;"D;"I;"S;"K / > IFDEF SINGL8 < BOMESS, 207;"Z;"M;" ;"D;"A;"T;"A;"-;"D;"I;"S;"K / > IFDEF SYRK8E < NOP RK0030, 6741 /WAIT TILL RK8E READY JMP .-1 / > IFDEF SYRL01 < NOP NOP RL0031, 6601 /WAIT TILL RL01 READY JMP .-1 / > IFDEF SYRX02 < NOP NOP RX0033, 6755 /WAIT TILL RX02 READY, 'LOAD' JUMPS TO HERE JMP RXLOAD+1 /FIGURE 8 WAIT WITH 'LOAD' SUBR > CLA BOMSLP, TAD BOMESS TLS /TYPE A WARNING MESSAGE IF BOOTED TSF /ON A REAL MACHINE JMP .-1 ISZ BOMSLP /SETUP FOR NEXT CHARACTER SMA SZA CLA JMP BOMSLP /GO FOR NEXT CHARACTER HLT IFDEF SYRX02 < JMS RXLOAD /EMPTY SILO JMP .-1 /RX02 PRIMARY BOOT JUMPS TO HERE NOPUNC *.-2 /BACK TO NORMAL (RELOC'D) ENPUNC RXLOAD=53 /DEF FROM PRIMARY BOOT > RELOC BOBOEND=.-BOBOOT TRPTAB, IFDEF UNTRP1 <UNTRP1^10+6001> IFDEF UNTRP2 <UNTRP2^10+6001> IFDEF UNTRP3 <UNTRP3^10+6001> IFDEF UNTRP4 <UNTRP4^10+6001> IFDEF UNTRP5 <UNTRP5^10+6001> IFDEF UNTRP6 <UNTRP6^10+6001> IFDEF UNTRP7 <UNTRP7^10+6001> IFDEF UNTRP8 <UNTRP8^10+6001> IFDEF UNTRP9 <UNTRP9^10+6001> 0000 /END OF LIST XDSKTAB,"S^100+"Y&3777;0;0;SIZE0 USYS1;UNIT1;FROM1;FROM1+SIZE1 USYS2;UNIT2;FROM2;FROM2+SIZE2 USYS3;UNIT3;FROM3;FROM3+SIZE3 USYS4;UNIT4;FROM4;FROM4+SIZE4 USYS5;UNIT5;FROM5;FROM5+SIZE5 USYS6;UNIT6;FROM6;FROM6+SIZE6 USYS7;UNIT7;FROM7;FROM7+SIZE7 BOOBUF, ZBLOCK 1000 /BUFFER IN WHICH THE BOOTBLK IS ASSEMBLED DVRSTB=BOOBUF+447 /SYS:-ENTRY DEVICE RESIDENCY TABLE DVTYPT=BOOBUF+560 /SYS:-ENTRY IN DEVICE TYPE TABLE FAKSYS=BOOBUF+607 /POSITION OF SYS: ENTRYP. IN BLOCK 0 BGCORW=BOOBUF+777 /BACKGROUND CORE-WORD /END IFNZRO BGMAX > PAGE /***************** TASKBUILDER ************************* /9 FILES CAN BE LOADED IN ONE SINGLE COMMAND LINE. /ONE SINGLE FILE MAY CONTAIN MORE THAN 1 TASK. /OPTIONS: /PAGE 0 VARIABLES BINPC=TEMP5 /LOAD POINTER ZNAME=TEMP1 /TASK'S NAME ZLENG=TEMP2 /LENGTH IN PAGES ZWC=TEMP3 /LENGTH OF TASK IN WORDS ZCNT=TEMP4 /TEMPORARY COUNTER ZBLK=TEMP6 /RELATIVE STARTING BLOCK ZADDR=TEMP7 /STARTING ADDRESS WITHIN THE TASK /ACTIVATE THE PRE-ASSEMBLED CORE-RESIDENT TASKS. SETNAM, 0 / TAD [NAMLST-1 /SET UP POINTERS DCA AUTO16 TAD [TCBTAB CDF 0 // SETNM1, DCA TEMP // TAD I TEMP //FIRST ITEM IS NAME OR 00 SNA JMP I SETNAM //ZERO IS TERMINATOR DCA I AUTO16 DCA I TEMP //CLEAR THE BACKLINK!! TAD TEMP //MOVE ONE BLOCKLET FURTHER TAD [10 JMP SETNM1 //CYCLE TSKBLD, 0 /TASKBUILD ROUTINE RSTRT, JMS I [OS8IN /READ CHAR FROM OS8IN JMP I TSKBLD /NO INPUT, RETURN /START LOADING ALL FILES, ONE BEHIND THE OTHER XL4, TAD [200-1 /V2 DCA AUTO10 /V2 TAD [-4600 /DON'T SPOIL BATCH (5000 AND UP) DCA TEMP /V2 CDF BGFLD+10 /V2 DCA I AUTO10 /V2 CLEAR LOADER AREA ISZ TEMP /V2 JMP .-2 /V2 CDF BGFLD /V2 ACM1 /RESET TO LEADER PHASE XL5, JMS I [BINL /READ FIRST FRAME AND SO ON JMP I TSKBLD /CTRL/Z DETECTED JMP XL6 /CHECKSUM DETECTED TAD BINPC /AC=0;INSPECT BEFORE LOADING SNA CLA / JMP XTABLS /LOAD PAGE ZERO: PATCH MONITOR TABLES TAD BINAC CDF BGFLD+10 //THERE WILL THE TASK BE LOADED DCA I BINPC // CDF BGFLD / JMP XL5 /READ NEXT FRAME XTABLS, TAD BINAC AND [7707 TAD [-6201 SZA CLA /MUST BE A CDF ERR21, JMS I [ERROR /PREAMBLE ERROR TAD BINAC DCA YCDF JMS I [BINL /GET NEXT WORD NOP ERR21A, JMS I [ERROR /PREABLE ERROR TAD BINAC /POINTER TO WORD TO PATCH DCA TEMP / JMS I [BINL /GET NEXT WORD NOP ERR21B, JMS I [ERROR /PREABLE ERROR TAD BINAC /THAT'S THE VALUE YCDF, HLT /GETS A CDF DCA I TEMP /AND PATCH IT NOW CDF BGFLD /RESTORE DATAFIELD JMP XL5 /AND JUMP BACK TO NORMAL LOADING XL6, SZA CLA /CHECKSUM IN AC ERR25, JMS I [ERROR /CKECKSUM ERROR /FETCH NAME AND LENGTH FROM TASK HEADER. /ALSO COMPUTE THE RELATIVE STARTING ADDRESS AC3777 CDF BGFLD+10 AND I [200 // SNA // JMP XL4 //EMPTY BINARY, SKIP IT DCA ZNAME // TAD I [201 //GET LENGTH WORD AND [7600 //MAKE CORRECT WORDCOUNT DCA ZWC // TAD I [201 // AND [77 //TASK CONNECTED? CLL RAL //# OF WORDS FOR 'CONNECT' IN AC TAD [201 //SKIP THEM DCA ZADDR // TAD I ZADDR //NOW SCAN THE RELOCATE POINTERS ISZ ZADDR // SZA CLA // JMP .-3 // CDF BGFLD TAD ZWC /SAVE ALSO LENGTH IN # OF PAGES CLL RAR BSW DCA ZLENG /LOADED BEYOND LENGTH OF TASK? TAD ZWC TAD [200 CIA CLL TAD BINPC /BINPC FROM 200 UP SZL CLA ERR26, JMS I [ERROR /LOADED BEYOND LENGTH /MAKE A TASK-CONTROL BLOCKLET /FIRST OF ALL GET AN ENTRY IN NAMLST. /SEARCH NAMLST IN CASE THIS IS A REPLACE OPERATION /THEN CHECK WHETHER THE /NEW VERSION CAN BE DROPPED INTO THE SAME HOLE. XL90, TAD [-MAXNAM /TEST FOR MAX NUMBER OF ENTRIES DCA ZCNT TAD [NAMLST DCA TEMP CDF 0 // XL9, TAD I TEMP CIA TAD ZNAME //SAME NAME? SNA CLA JMP I [XL91 //Y ISZ TEMP //NEXT ENTRY ISZ ZCNT //ALL DONE ? JMP XL9 //NO, CYCLE TAD I [FHEAD //MUST BE A NEW NAME, ALLOCATE NEW TCB SNA //ANY SPARE TCB'S ? ERR28, JMS I [ERROR //NAMELIST EXHAUSTED DCA TEMP //POINTER TO NEW TCB TAD I TEMP //GET NEXT FREE TCB ADDRESS DCA I [FHEAD //AND STORE IN FHEAD CDF BGFLD / /SEARCH A HOLE IN DISKMAP. XL75, TAD [DSKMAP DCA AUTO10 LOOP, TAD I AUTO10 SZA CLA JMP .-2 /LOOP TAD AUTO10 TAD [-ENDMAP /COMPARE WITH END OF MAP SNA CLA /IS THIS THE END ? ERR27, JMS I [ERROR /DISKMAP FULL TAD ZLENG STL CIA RAR /CONVERT TO - # BLOCKS DCA ZCNT /SETUP COUNTER JMP LOOP2 /JUMP IN LOOP TO CHECK LENGTH LOOP1, TAD I AUTO10 /GET NEXT WORD SZA CLA /ALSO FREE ? JMP LOOP /NO, LOOK FOR NEXT HOLE LOOP2, ISZ ZCNT /LONG ENOUGH ? JMP LOOP1 /NO, SEE IF THERE IS MORE ROOM /OK, FOUND HOLE THAT'S LARGE ENOUGH TAD ZLENG STL CIA RAR /- # BLOCKS TAD AUTO10 /SAVE POSITION IN DISKMAP TAD [-DSKMAP /RELATIVE BLOCK# TAD I [DSKMAP /ADD OFFSET IN SAVE FILE DCA ZBLK /FILL IN THE DISKMAP TAD ZLENG /COUNTS # OF PAGES STL CIA RAR /V3 CONVERT TO -# OF BLOCKS DCA ZCNT TAD ZLENG /SET POINTER TO BEGIN OF HOLE STL CIA RAR / TAD AUTO10 DCA AUTO10 TAD ZNAME /NAME MUST BE UNEQ 0 DCA I AUTO10 ISZ ZCNT JMP .-3 JMP XL10 /NAME DOES ALREADY EXIST IN THE SYSTEM, DELETE THE OLD /TASK FIRST XL91, DCA I TEMP /ZERO THE NAME ENTRY TAD TEMP TAD [-NAMLST CLL RAL /^10 RTL /FIND PLACE IN TCBTAB TAD [TCBTAB DCA TEMP TAD I [FHEAD DCA I TEMP TAD TEMP DCA I [FHEAD ISZ TEMP ISZ TEMP ISZ TEMP TAD I TEMP /GET BLOCKNUMBER OFFSET CIA CDF BGFLD TAD I [DSKMAP /SUBSTRACT OFFSET IN SAVEFILE CMA /CIA: BUG, CORRECTED 13-JAN-80 TAD [DSKMAP DCA AUTO10 TAD AUTO10 DCA AUTO11 DELETE, TAD I AUTO10 CIA TAD ZNAME SZA CLA /STILL THE SAME NAME ? JMP ENDDEL /NO, ENTRY IS DELETED DCA I AUTO11 /DELETE THIS ENTRY JMP DELETE ENDDEL, CDF 10 TAD I [7643 CDF BGFLD AND [400 SZA CLA /DELETE OPTION SWITCH (/D) ? JMP I [XL4 /YES, DON'T INSTALL THIS TASK JMP I [XL90 /NO, GO INSTALL THIS TASK /START FILLING IN THE PARAMETERS: XL10, TAD TEMP /POINTER IN TCBTAB DCA AUTO11 CDF 0 // DCA I TEMP //ZERO BACKLINK CDF BGFLD+10 AC0100 /EXTRACT AUTO-START BIT AND I [201 CDF 0 DCA I AUTO11 /SET 0 OR 100 IN THREAD WORD TAD ZADDR /STARTING ADDRESS FROM *200 ON AND [177 /V3 MAKE IT PAGE ZERO DCA I AUTO11 /RELATIVE STARTING ADDRESS TAD ZBLK DCA I AUTO11 /RELATIVE BLOCK NUMBER TAD ZWC /LENGTH,FIELD AND ONDISK BIT CLL RAR /V7A BREAK-FLAG=0 TAD [FIELDS^10+1 /V3 SET ONDISK BIT, DCA I AUTO11 /RELATE TO HIGHEST+1 FG-FIELD TAD [CDF%2 DCA I AUTO11 /UPDATE NAMLST. /POSITION IN NAMLST. TAD TEMP TAD [-TCBTAB CLL RAR CLL RAR CLL RAR TAD [NAMLST DCA TEMP TAD ZNAME DCA I TEMP /WRITE TASK ONTO DISK CDF BGFLD TAD ZLENG CLL IAC RAR /# OF BLOCKS TAD ZBLK /+ RELATIVE BLOCK # TAD I (ACTLEN /-ACTUAL FILE LENGTH SMA CLA ERR23, JMS I [ERROR /?MULTI8.SV TOO SHORT? TAD ZWC /MAKE FUNCTIONWORD STL RAR /WRITE; WLL.LLL.FFF.000 TAD [BGFLD+10 DCA XLDTV TAD I [OFSET /BLOCK# ON DISK TAD ZBLK DCA XLBLK CIF 0 JMS I [SYSHND XLDTV, 0 /FUNCTION WORD 200 /ADDRESS IN CORE XLBLK, 0 /BLOCK # ON DISK ERR29, JMS I [ERROR /WRITE ERROR DCA CHANGD /SET SAVE FLAG JMP I [XL4 PAGE /BINARY LOADER SUBROUTINE READ A BINAIRY FILE AND /PRODUCES TWO PARAMETERS OF /INTEREST:THE LOAD POINTER 'BINPC', AND THE CONTENTS /OF THE DATA 'BINAC'. THE USER CAN TEST FORMATS AND /BOUNDARIES, AND HAS TO DEPOSIT THE DATA HIMSELF. /DURING LEADER PHASE THE ROUTINE IGNORES LEADER /CODE. A JMS TO BINL WITH AC UNEQ 0 ALSO /RESETS ALL PARAMETERS AND RETURNS TO LEADER MODE. /HOW TO USE THE ROUTINE AS A STANDARD BINARY LOADER /START, JMS BINL / HLT /EOT RETURN;AC=0 / HLT /READY RETURN;AC=DIFFERENCE IN CHECKSUMS / TAD BINAC /AC=0;NORMAL RETURN / CDF DATAFIELD / DCA I BINPC / JMP START BINL, .-. /AC UNEQ 0 =RESET PARAMETERS SZA CLA JMP BINIT /RESET ISZ BINPC /V4 UPDATE POINTER BINCHX, TAD BINW1 /V4 UPDATE CHECKSUM TAD BINW2 /V4 TAD BINSUM /V4 BINGO, DCA BINSUM /CLEAR OR ADD TO CHECKSUM TAD BINCHR DCA BINW1 JMS I [OS8IN /V4 LOOK AHEAD JMP I BINL /END OF TAPE DCA BINW2 JMS BINGG /READ NEXT JMP BINEND /TRAILER= END JMS BINASS /ASSEMBLE WORD1 AND WORD2 SZL /ORIGIN ? JMP BINNPC /V4 YES:SET ORIGIN DCA BINAC /SAVE DATA ISZ BINL /NORMAL RETURN BINOUT, ISZ BINL /V4 CHECKSUM RETURN JMP I BINL /V4 BINNPC, DCA BINPC /V4 SET ORIGIN JMP BINCHX /V4 DON'T UPDATE POINTER BINGG, .-. /READ AND TEST FRAMES JMS I [OS8IN /V4 JMP I BINL /END OF TAPE DCA BINCHR /SAVE FRAME TAD BINCHR TAD [-200 /200 ? SPA /YES ISZ BINGG /DATA OR ORIGIN SPA SNA CLA JMP I BINGG /DATA, ORIGIN OR L/T TAD BINCHR TAD [-300 SMA /IS IT REALLY A BINARY FILE ? AND [7 SNA CLA /V4 JMP BINGG+1 /V4 IGNORE FIELD SETTING ERR22, JMS I [ERROR /?BAD BINARY? BINASS, .-. /ASSEMBLE 2 FRAMES TAD BINW1 CLL RTL /SWAP BYTES RTL RTL /NO BSW!, ORIGIN SETTING MAKES LINK=1 TAD BINW2 JMP I BINASS /RETURN BINIT, DCA BINW1 /V4 DCA BINW2 /V4 TAD [200 /V4 DCA BINPC /V4 JMS BINGG JMP .-1 /IGNORE LEADER JMP BINGO BINEND, ACM1 TAD BINPC DCA BINPC /BACKUP BINPC JMS BINASS /FOR CHECKSUM CIA TAD BINSUM JMP BINOUT /CHECKSUM RETURN BINCHR, 0 /LAST READ CHAR. BINW1, 0 /FIRST FRAME BINW2, 0 /SECOND FRAME BINSUM, 0 /CHECKSUM PAGE /USER EQUATES IBUFLG=1 /LENGTH OF INPUT BUFFER /PROGRAM EQUATES OSIFLD=BGFLD /FIELD OF PROGRAM IS IBUFLD=BGFLD /FIELD OF INPUTBUFFER IPRFLD=BGFLD /FIELD OF CALLING PROGRAM / DATAFIELD: /0 FIELD 0 /1 FIELD 10 /Z FIELD ZERO OS8IN, 0 JMP I OSIPCH /Z COROUTINES OSIFRST, OSINXT, CDF 10 /1 ISZ OSIFILP /1 TAD I OSIFILP /1 CDF OSIFLD / SNA /Z JMP OSIRST /Z NO NEXT ONE, MAKE RESTARTABLE CIF 10 / JMS I OSIUSR /Z INQUIRE /Z FETCH HANDLER OSIHND, 0 /Z INIT VALUE JMP ERR9 /VERY STRANGE INDEED TAD OSIHND /GET HANDLER ADDRESS TAD (200 AND (7600 SZA CLA /ADDRESS IN PAGE 7600 ? ERR9, JMS I (ERROR /?NON-RESIDENT HANDLER? CDF 10 /1 ISZ OSIFILP /1 TAD I OSIFILP /1 DCA OSIBLK /1 CDF OSIFLD / OSIREAD, /Z TAD (7600 /Z DCA OSICNT /Z TAD (200+IBUFLD /Z DCA OSIFUNC /Z CIF 0 / JMS I OSIHND / OSITEM, OSIFUNC, 200+IBUFLD /Z OSIBUF, BUFST /Z OSIBLK, 7746 /Z INIT VALUE ERR10, JMS I (ERROR /?READ ERROR? ISZ OSIBLK /Z TAD OSIBUF /Z DCA OSIPNT /Z OSILP, TAD I OSIPNT /Z FAST BUFFER UNPACK JMS OSIPCH /Z TAD I OSIPNT /Z ISZ OSIPNT /Z AND (7400 /Z DCA OSITEM /Z TAD I OSIPNT /Z JMS OSIPCH /Z TAD I OSIPNT /Z ISZ OSIPNT /Z AND (7400 /Z CLL RTR /Z RTR /Z TAD OSITEM /Z RTR /Z RTR /Z JMS OSIPCH /Z ISZ OSICNT /Z JMP OSILP /Z ISZ OSINUM /Z JMP OSIREAD /Z JMP OSINXT /Z OSIPCH, OSIFRST /Z COROUTINES AND (377 /Z TAD (-232 /Z SNA /Z JMP OSINXT /Z ISZ OS8IN TAD (232 /Z JMP I OS8IN /Z OSIRST, TAD (OSIFRST /Z DCA OSIPCH /Z TAD (7617-1 /Z DCA OSIFILP /Z JMP I OS8IN /Z OSIFILP,7617-1 OSIUSR, 7700 OSIPNT, 0 OSINUM, 0 OSICNT, 0 PAGE BUFST, ZBLOCK 400 /INPUT BUFFER ENDPWR=.+400&7400 /PAGE ZERO LITERALS: $